
"""
列表的切片操作 和 遍历
"""

# 列表的切片操作: 是一个比较高效的操作, 只是取出了原有列表的一个部分, 不涉及到 "数据拷贝".
alist = [13, 'hello', False, [14, 'world', True]]
print(alist[1:3])
# 切片操作中, []里面有两个数字, 表示一段区间.[start:end]-->[start,end) 是一个前闭后开区间
print(alist[1:len(alist)])

# 切片操作是可以省略前后的两个边界的:
# 1. 省略后边界: 从开始位置, 一直取到整个列表结束
print(f"省略后边界: {alist[1:]}")
# 2. 省略前边界: 从0下标位置, 一直取到结束位置
print(f"省略前边界: {alist[:4]}")
print(f"省略前边界: {alist[:-1]}")
# 3. 同时省略前, 后边界: 得到列表自身
print(f"同时省略前, 后边界: {alist[:]}")
print("--------------------------------------------------------")

# 将切片的返回值赋给 c
c = alist[:]
print(type(c))
print(c)
print("--------------------------------------------------------")

# 切片操作, 还可以指定步长
d = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 第二个冒号后面的数字就是步长, 为1
print(d[::1])
print(d[::2])
print(d[1:len(d)-1:2])
print("--------------------------------------------------------")

# 步长为负数, 就是逆序打印
print(d[::-1])
print(d[::-2])
print("--------------------------------------------------------")

# 当切片的范围超出有效下标之后, 不会出现异常! 而是尽可能地把符合要求的元素获取到.
d = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(d[1:20])
print(d[-1:20])


print("--------------------------------------------------------")
print("--------------------------------------------------------")
print("-------------------     列表的遍历     -------------------")

# 列表的遍历 :
# 1. 使用 for 循环
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for elem in a:
    print(elem, end=' ')
print()

# 2. 使用 for 循环 + 下标的方式.
for i in range(0, len(a)):
    print(a[i], end=' ')
print()

# 3. while 循环 + 下标
i = 0
while i < len(a):
    print(a[i], end=' ')
    i += 1
print()

